/**
 * 网络请求配置
 */
import { notification } from "antd";
import axios from "axios";

axios.defaults.timeout = 100000;
axios.defaults.baseURL = "http://42.192.82.19:50000/";


//创建axios实例
const request = axios.create();
/**
 * http request 拦截器
 */
request.interceptors.request.use(
  (config) => {
    const loginToken = localStorage.getItem('login_token') || '';
    config.data = JSON.stringify(config.data);
    config.headers = {
        ...config.headers,
        Authorization: loginToken?loginToken:'',
      "Content-Type": "application/json",
    };
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

/**
 * http response 拦截器
 */
request.interceptors.response.use(
  (response) => {
    return response?.data?.data || response;
  },
  (error) => {
    const { response } = error;
        if (response) {
            // 请求已发出，但是不在200的范围，调用统一错误处理方法
            errorHandle(response.status, response.data.msg);
            return Promise.reject(response);
        } else {
            notification.error({
            message: '系统或网络错误，请检查后重试', // TODO 判断客户端错误类型
            duration: 3
          })
            // 处理断网的情况
            // eg:请求超时或断网时，更新state的network状态
            // network状态在app.vue中控制着一个全局的断网提示组件的显示隐藏
            // 关于断网组件中的刷新重新获取数据，会在断网组件中说明
            // store.commit('changeNetwork', false);
        }
  }
);
/*
 * 请求失败后的错误统一处理
 * @param {Number} status 请求失败的状态码
 * @param other 响应反馈信息
 */
const errorHandle = (status: any, msg: any) => {
    notification.error({
    message: status,
    description: msg,
    duration: 1
  })
}
export default request;